var oiseaux = new Array; // tableau qui contient tous les oiseaux et leurs positions
var compteurAiles = 0; // variable qui permet de changer les ailes des oiseaux après le nombre de rafraichissement du compteur
var seconds; // Variable du temps qui défile
var nb_bird; // Nombre d'oiseaux à tuer
var bird_speed_x; // Vitesse de l'oiseau en x
var bird_speed_y; //Vitesse de l'oiseau en y
var nb_killed = 0; // Nombre d'oiseaux tués
var initialized = 0; // Vérifie si le jeu a déjà été initialisé
var compteurDirection = 0; // Variable qui permet de changer la direction de l'oiseau
var capturing; // etat pour savoir si on est en train de capturer un pokemon

var canvas; // Gestion de la balise canvas
var context; // Gestion du contexte 2d du canvas
var mouse; // Déclaration de la variable qui gère la position du curseu
var timerCapture;

//création d'un oiseau
function Oiseau(posX,posY,death,stateAiles,direction,seuil,speedX,speedY,img) {
	this.posX=posX;
	this.posY=posY;
	this.death=death; //mort ou vivant
	this.stateAiles=stateAiles; // ailes en haut ou en bas
	this.direction = direction; // gauche ou droite
	this.seuil = seuil;
	this.speedX = speedX;
	this.speedY = speedY;
	this.img = img;
 }

// Initialisation du jeu
function initGame()
{
	canvas = document.getElementById("headerGame");
	//canvas.style.cursor = 'none'; // On enlève le curseur de la souris
	context = canvas.getContext('2d');
		
	canvas.addEventListener("mousedown", function() // Evénement lors du clic
	{
		if(nb_bird > 0)
			killOiseau(mouse.pos.x,mouse.pos.y); // Essaye de tuer un oiseau
		else {
			if(mouse.pos.x > 200 && mouse.pos.x < 400 
					&& mouse.pos.y > 50 && mouse.pos.y < 200)
				initValues();
		}
	}, false);
     
	// Evénement qui met à jour la position du curseur
    canvas.addEventListener("mousemove", function(evt)
	{
        var pos = getMousePos(canvas, evt);
        mouse.pos.x = pos.x;
        mouse.pos.y = pos.y;
    });
    
    initValues();
}


//Initialisation d'une partie
function initValues()
{
	canvas.style.cursor = 'none'; // On enlève le curseur de la souris
	
	// Paramétrage des variable	s
	nb_bird = 1;
	bird_speed_x = 1.5;
	bird_speed_y = 0.5;
    
	// Instanciation de l'objet souris
    mouse = {
        pos: {}
    };
    
    capturing = {
    	state : false,
    	step : 0
    };
    	
	// initialisation des positions
    oiseaux.push(new Oiseau(canvas.width+100,160,0,0,true,Math.random()*5000,-1,0,imgPoke1));
    oiseaux.push(new Oiseau(10,160,0,0,true,Math.random()*5000,-1.5,0,imgPoke1));
    oiseaux.push(new Oiseau(40,80,0,0,true,Math.random()*5000,-2,-0.5,imgPoke2));
	/*for(var i=0;i<nb_bird;i++)
	{
		oiseaux[i] = new Oiseau(Math.random()*400,Math.random()*1000,0,0,true,Math.random()*5000);
	}*/
    nb_bird = oiseaux.length;
	animate(); // Lancement de l'animation
}


//Fonction pour vérifier si on clique bien sur un oiseau
function killOiseau(mouseX,mouseY)
{
	for(var i=0;i < nb_bird; i++)
	{
		// Comparaison de la position horizontale de la souris
		if((mouseX < oiseaux[i].posX + 50) && (mouseX > oiseaux[i].posX) 
			// Comparaison de la position verticale de la souris + vérification que l'oiseau est vivant
			&& (mouseY < oiseaux[i].posY + 60) && (mouseY > oiseaux[i].posY) && (oiseaux[i].death == false))
		{
			// on change letat pour lui dire qu'il est mort
			oiseaux[i].death = true;
			capturing.state = true;
		}
	}
}

//Fonction qui anime les oiseaux et rafraichit la page en boucle         
function animate()
{
	context.clearRect(0, 0, canvas.width, canvas.height);
	drawLogoPokeshop();
	
	compteurAiles++;	
	
	if(!capturing.state){
		for(var i=0;i < nb_bird;i++)
		{
			//rafraichissement des positions et direction
			if(oiseaux[i].death == false)
			{
				if(oiseaux[i].direction)
				{
					oiseaux[i].posX += oiseaux[i].speedX;
				}
				else
				{
					oiseaux[i].posX += oiseaux[i].speedX;	
				}
				
				oiseaux[i].posY += oiseaux[i].speedY;
				
			}
			/*else 
			{
				oiseaux[i].posY+=5;
			}*/
			
			if((oiseaux[i].stateAiles == 0) && (compteurAiles == 10))
			{
				oiseaux[i].stateAiles = 1;
			}		
			else if((oiseaux[i].stateAiles == 1) && (compteurAiles == 10))
			{
				oiseaux[i].stateAiles = 0;
			}
			
			compteurDirection += 1;
			if (compteurDirection > oiseaux[i].seuil)
				oiseaux[i].direction = false;
			else
				oiseaux[i].direction = true;
		}
		
		// reinitialisation des compteurs
		if(compteurAiles == 10)
		{
			compteurAiles = 0;
		}
		
		if (compteurDirection > 5000)
		{
			compteurDirection = 0;
			for (var j = 0; j < nb_bird;j++)
				oiseaux[j].seuil = Math.random()*5000;
		}
		
		// Animation des oiseaux
		for(var i=0;i<nb_bird;i++)
		{
			animateImage(oiseaux[i].posX,oiseaux[i].posY,i);
		}
		
		drawCrossHair();
		
		// Rafraichissement du Frame avec appel récursif de la fonction
	    requestAnimFrame(function()
		{
			animate();
	    });
	}
	// capture d'un pokemon
	else {
		if(capturing.step == 0){
			timerCapture = setInterval(animateCapture, 20);
		}
		// Animation des oiseaux
		for(var i=0;i<nb_bird;i++)
		{
			animateImage(oiseaux[i].posX,oiseaux[i].posY,i);
		}
	}
}


//Rafraichissement du Frame
window.requestAnimFrame = (function(callback)
{
    return window.requestAnimationFrame ||
    window.webkitRequestAnimationFrame ||
    window.mozRequestAnimationFrame ||
    window.oRequestAnimationFrame ||
    window.msRequestAnimationFrame ||
    function(callback)
	{
        window.setTimeout(callback, 1000 / 60);
    };
})();


function animateImage(posX,posY,numOiseau)
{
	// si en capture
	if(oiseaux[numOiseau].death && capturing.state==false)
	{
		/*
		context.drawImage(imgDown,posX,posY);
		
		//si on tue un oiseau on le replace
		if(posY > canvas.height+40){
			oiseaux[numOiseau].posX = Math.random()*400;
			oiseaux[numOiseau].posY = Math.random()*500;
			oiseaux[numOiseau].death = 0;
			oiseaux[numOiseau].stateAiles = 0;
			oiseaux[numOiseau].direction = true;
			oiseaux[numOiseau].seuil = Math.random()*5000;
		}
		*/
	}
	//sinon il est vivant
	else
	{
		// si l'oiseau sort du cadre on le replace
		if(posX < (-100))
		{
			posX = canvas.width+30; // Sort à droite
		}
		else if(posX > canvas.width+100)
		{
			posX = -30; // Sort à gauche
		}
		
		if(posY < (-60))
		{
			posY += canvas.height+40; // Sort au-dessus
		}
		
		//maj des positions des oiseaux
		oiseaux[numOiseau].posX = posX;
		oiseaux[numOiseau].posY = posY;
		
		// en fonction de l'etat de l'aile, on dessine soit aile haut/bas
		if(oiseaux[numOiseau].stateAiles == 1) // Ailes en haut
		{
			// en fonction de la direction, on dessine soit loiseau vers la droite soit vers gauche
			if(oiseaux[numOiseau].direction)
				context.drawImage(oiseaux[numOiseau].img,posX,posY);
			else
				context.drawImage(oiseaux[numOiseau].img,posX,posY);
		}
		else // Ailes en bas
		{
			if(oiseaux[numOiseau].direction) // L'oiseau va à gauche
				context.drawImage(oiseaux[numOiseau].img,posX,posY);
			else
				context.drawImage(oiseaux[numOiseau].img,posX,posY);
		}
	}
}


//Fonction de dessin du viseur
function drawCrossHair(){
            
    if (mouse.pos.x && mouse.pos.y) {
        //context = canvas.getContext("2d");
        //var taille = 3;
        var mouseX = mouse.pos.x;
        var mouseY = mouse.pos.y;
        //context.globalCompositeOperation = 'destination-over';
        context.drawImage(imgPokeballCursor,mouseX-25,mouseY-25);
    }
}


//Fonction qui retourne la position de la souris
function getMousePos(canvas, evt)
{
    // get canvas position
    var obj = canvas;
    var top = 0;
    var left = 0;
    while (obj.tagName != 'BODY') {
        top += obj.offsetTop;
        left += obj.offsetLeft;
        obj = obj.offsetParent;
    }
                
    // return relative mouse position
    var mouseX = evt.clientX - left + window.pageXOffset;
    var mouseY = evt.clientY - top + window.pageYOffset;
    return {
        x: mouseX,
        y: mouseY
    };
}

var temp_x = null;
var temp_y = null;
var offset = 0;
function animateCapture(){
	context = canvas.getContext('2d');
	context.clearRect(0, 0, canvas.width, canvas.height);
	drawLogoPokeshop();
	// Animation des oiseaux
	for(var i=0;i<nb_bird;i++)
	{
		animateImage(oiseaux[i].posX,oiseaux[i].posY,i);
	}
	
	// ptetre dessiner à la position de loiseau mort
	// (pour eviter que la pokeball soit dessiner a coté de loiseau)
	// non enfait bof
	var mouse_x,mouse_y;
	if(capturing.step==0){
		temp_x = mouse.pos.x;
		temp_y = mouse.pos.y;
		mouse_x = temp_x;
		mouse_y = temp_y;
	}
	else {
		mouse_x = temp_x;
		mouse_y = temp_y;
	}
	capturing.step++;
	offset+=1;
	//context.globalCompositeOperation = 'source-over';
	if(capturing.step == 1){
		context.drawImage(
				imgSpritePokeball,
				0,0,
				50,50,
				mouse_x-25,mouse_y-25,
				50,50
			);
	}
	else {
		// pokeball bottom
		context.drawImage(
			imgSpritePokeball,
			50,40,
			50,25,
			mouse_x-25,mouse_y+offset,
			50,25
		);
		// pokeball top
		context.drawImage(
			imgSpritePokeball,
			50,0,
			50,35,
			mouse_x-25,mouse_y-25-offset,
			50,35
		);
		if(capturing.step==20){
			capturing.step = 0;
			capturing.state = false;
			offset=0;
			triBird();
			nb_bird--;
			clearInterval(timerCapture);
			if(nb_bird == 0){
				context.clearRect(0, 0, canvas.width, canvas.height);
				canvas.style.cursor = 'default';
				context.drawImage(imgWin,(canvas.width/2)-350,30);
				addCodeReductionFromCanvas();
			}
			else{
				animate();
			}
		}
	}
}

function displayCanvas()
{
	// le canvas prend la taille de son parent
	// qui lui prend la taille de l'ecran
	canvas = document.getElementById("headerGame");
	window.addEventListener('resize',resizeCanvas,false);
	function resizeCanvas(){
		canvas.width = document.getElementById("canvas").offsetWidth;
	}
	resizeCanvas();
}

function triBird(){
	var id = null;
	for(var i=0; i < nb_bird;i++){
		if(oiseaux[i].death){
			id = i;
		}
	}
	oiseaux.splice(id,1);
}

function drawLogoPokeshop(){
	//context.globalCompositeOperation = 'source-over';
	context.drawImage(logoPokeshop,
			(canvas.width/2)-(logoPokeshop.width/2),
			20);
}

function addCodeReductionFromCanvas(){
	$.ajax({
        type: "POST",
        url: document.URL.substring(0,document.URL.indexOf('/',8)+1)+
        	'pokeshop/web/app_dev.php/add_code_reduction_from_canvas',
        success: function(data){
           alert(data);
        },
        error: function(){
			alert("Une erreur s'est produite");
		}
    });
}